package com.wsc.personalblog.service;

import com.github.pagehelper.PageInfo;
import com.wsc.personalblog.DTO.ArticleDTO;
import com.wsc.personalblog.common.Result;
import com.wsc.personalblog.entity.Article;
import com.wsc.personalblog.exception.ArticleSaveException;
import io.swagger.models.auth.In;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;
import java.util.Map;

public interface ArticleService {

    /**
     * 发布新文章
     * @param articleDTO 文章全部信息包括标签信息
     * @return
     */
    Result<String> addArticle(ArticleDTO articleDTO) throws ArticleSaveException;

    /**
     * 分页查询所有文章,可根据关键字、分类id进行查询,不传分类id就查所有
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @param keyword 关键字
     * @return
     */
    PageInfo<ArticleDTO> getArticlePaging(Integer categoryId , Integer pageNum, Integer pageSize, String keyword);

    /**
     * 分页查询所有文章,可根据关键字进行查询
     * 弃用
     * @return
     */
    @Deprecated
    PageInfo<ArticleDTO> getAllArticlePaging(Integer pageNum, Integer pageSize, String keyword);

    /**
     * 更新文章
     * @param articleDTO 需要更新的新文章全部信息包括标签信息
     * @return
     */
    Result<String> updateArticle(ArticleDTO articleDTO , String oldTitle);

    /**
     * 删除文章
     * @param articleId 需要删除的文章的id
     * @return
     */
    Result<String> removeArticle(Integer articleId  , String fileName);


    Integer getDrafts();

    void unshelve(Article article);

    void shelve(Article article);

    PageInfo<ArticleDTO> getArticleInfo(Integer categoryId, Integer pageNum, Integer pageSize, String keyword);

    String uploadImg(MultipartFile file) throws IOException;

    void pubArticle(Map<String,Object> map);


    PageInfo<ArticleDTO> getDraftsInfo(Integer categoryId, Integer pageNum, Integer pageSize, String keyword);

    Article getArticleInfoById(Integer articleId);

    void editArticle(Map<String, Object> map);
}
